# 对象 = 属性 + 方法
# 首先要创建一个类

# 类名次要用大写字母开头
class Turtle:
    # 属性
    head = 1
    eyes = 2
    legs = 4
    shell = True

    # 方法
    def crawl(self):
        print("人们总抱怨我动作慢吞吞的，殊不知如不积跬步，无以至千里的道理。")

    def run(self):
        print("虽然我行动很慢，但如果遇到危险，还是会夺命狂奔的T_T")

    def bite(self):
        print("人善被人欺，龟善被人骑，我可是会咬人的！")

    def eat(self):
        print("谁知盘中餐，粒粒皆辛苦，吃得好，不如吃得饱～")

    def sleep(self):
        print("Zzzz...")


# t1 就是一个 Turtle 类的对象，叫做实例对象
t1 = Turtle()
print(t1.head)
print(t1.legs)
t1.crawl()
t1.bite()
t1.sleep()

print("=" * 100)

# 一个类如Turtle可以有无数个对象
t2 = Turtle()
print(t2.head)
print(t2.legs)
t2.crawl()
t2.bite()
t2.sleep()

# 可以修改对象的属性值
t2.legs = 3
print(t2.legs)
print(t1.legs)  # t2的腿少了一条，但是不会影响其他的对象

# 动态的创建一个属性,就跟在字典中添加一个新的键值对
t1.mouth = 1
#['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'bite', 'crawl', 'eat', 'eyes', 'head', 'legs', 'mouth', 'run', 'shell', 'sleep']
print(dir(t1))
#['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'bite', 'crawl', 'eat', 'eyes', 'head', 'legs', 'run', 'shell', 'sleep']
print(dir(t2))
assert dir(t1) != dir(t2)

